package com.pattern.memento;

/**
 * 备忘录模式
 * @author role
 *  备忘录模式
　　备忘录模式是一种软件设计模式：在不破坏封闭的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。
    这样以后就可将该对象恢复到原先保存的状态。
    一听到备忘录这个字的时候想起了小小时打的游戏，每次遇到大boss的时候都会保存一下进度，
    打过了就不需要恢复记录，打不过肯定就复原到刚刚保存的记录咯，重新打一遍BOSS，打死为止。
    哈哈，这就是备忘录模式，虽然很多模式都只是学到基础，但是发现越来越接近生活了。
 *
 *  涉及角色：
 *  　　Originator(发起人)：负责创建一个备忘录Memento，用以记录当前时刻自身的内部状态，并可使用备忘录恢复内部状态。
 *               Originator可以根据需要决定Memento存储自己的哪些内部状态。
 *   　 Memento(备忘录)：负责存储Originator对象的内部状态，并可以防止Originator以外的其他对象访问备忘录。
 *              备忘录有两个接口：Caretaker只能看到备忘录的窄接口，他只能将备忘录传递给其他对象。
 *              Originator却可看到备忘录的宽接口，允许它访问返回到先前状态所需要的所有数据。
 *   　 Caretaker(管理者):负责备忘录Memento，不能对Memento的内容进行访问或者操作。
 */
public class Client {
    public static void main(String[] args) {
        GameRole role=new GameRole();
        role.init();
        role.show();
        RoleStateMange adminMange=new RoleStateMange();
        adminMange.setMemento(role.saveMemento());//保存
        role.fightBoss();
        role.show();
        role.recove(adminMange.getMemento());
        role.show();

    }
}
